package main

import (
	"fmt"
	"sync"
)

var num int
var wg sync.WaitGroup
var mutex sync.Mutex

//使用锁机制，一个人调用锁加锁成功后，其他人再调用将会阻塞等待锁被释放

func add() {
	mutex.Lock()   //修改数据前要加锁
	num++          //多个goroutine同时执行，可能导致数据混乱
	mutex.Unlock() //修改数据后要释放锁
	wg.Done()
}

func main() {
	wg.Add(1000)
	for i := 0; i < 1000; i++ {
		go add()
	}
	wg.Wait() //确保1000个goroutine都能顺利执行
	fmt.Println(num)
}
